#include<bits/stdc++.h>
using namespace std;

typedef pair<double,int> PDI;
const int N = 1e5 + 5,M = 1e6 + 5;
int T,n,m,L,V;
int d[N],v[N],a[N],p[N],st[M];

int main(){
    freopen("detect.in","r",stdin);
    freopen("detect.out","w",stdout);
    scanf("%d",&T);

    while(T--){
        bool f1 = 1,f2 = 1,f3 = 1;
        scanf("%d%d%d%d",&n,&m,&L,&V);
        for(int i = 1;i <= n;i++){
            scanf("%d%d%d",&d[i],&v[i],&a[i]);
            if(a[i] != 0) f1 = 0;
            if(a[i] <= 0) f2 = 0;
            if(a[i] >= 0) f3 = 0;
        }
        for(int i = 1;i <= m;i++) scanf("%d",&p[i]);
        sort(p + 1,p + m + 1);

        if(f1){
            int cnt = 0;
            for(int i = 1;i <= n;i++) if(v[i] > V && d[i] <= p[m]) cnt++;
            if(cnt == 0) m += 1;
            printf("%d %d\n",cnt,m - 1);
       
        }
        if(f2){
            int cnt = 0;
            for(int i = 1;i <= n;i++){
                if(d[i] > p[m]) continue;
                if(sqrt(1.0 * 2 * a[i] * (p[m] - d[i]) + v[i] * v[i]) > V) cnt++;
                // cout << t << endl;
            }
            if(cnt == 0) m += 1;
            printf("%d %d\n",cnt,m - 1);
    
        }

        // int idx = 1;
        // for(int i = 0;i <= L;i++){
        //     st[i] = p[idx];
        //     if(p[idx] == i) idx++;
        // }
        // if(f3){
        //     int cnt = 0;
        //     for(int i = 1;i <= n;i++){
        //         if(d[i] > p[m]) continue;
        //         if(sqrt(1.0 * 2 * a[i] * (st[d[i]] - d[i]) + v[i] * v[i]) > V) cnt++;
        //     }
        //     printf("%d\n",cnt);
        // }
    }

    return 0;
}